﻿Imports System.Globalization

Public Class frmComprasGastos

    Dim controllerSYS As New ControllerSigeco.controller_sistema
    Dim controller As New ControllerSigeco.controller_compras
    Dim controllerVta As New ControllerSigeco.controller_ventas
    Dim controllerStock As New ControllerSigeco.controller_stock

    Private Sub cbxVto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'fechaVto.Enabled = cbxVto.Checked
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click

        If codCajaExterno > 0 Then
            codCajaExterno = 0
            Me.Close()
        Else

            If oiml.idMovimientoCajaActual > 0 Then

                Dim resulDialog As DialogResult = MessageBox.Show("Desea salir pero antes cerrar la caja abierta?", "SIGECO", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)

                If resulDialog = Windows.Forms.DialogResult.Yes Then

                    frmCajaApert = New frmCajaApertura
                    frmCajaApert.ShowDialog()
                    If frmCajaApert.DialogResult = Windows.Forms.DialogResult.Abort Then
                        codCajaExterno = 0
                        Me.Close()
                    End If

                ElseIf resulDialog = Windows.Forms.DialogResult.Cancel Then

                Else
                    codCajaExterno = 0
                    Me.Close()
                End If

            Else
                codCajaExterno = 0
                Me.Close()
            End If


        End If

    End Sub

    ''----
    Private _codTipo As String

    Public Property codTipoParam() As String
        Get
            Return _codTipo
        End Get
        Set(ByVal value As String)
            _codTipo = value
        End Set
    End Property
    ''----

    'Private _codCaja As Integer = 0

    'Public Property idMovimientoCaja() As Integer
    '    Get
    '        Return _codCaja
    '    End Get
    '    Set(ByVal value As Integer)
    '        _codCaja = value
    '        oiml.idMovimientoCajaActual = value
    '    End Set
    'End Property

    Private _codProveedor As Integer = 0

    Public Property codProveedor() As Integer
        Get
            Return _codProveedor
        End Get
        Set(ByVal value As Integer)
            _codProveedor = value
        End Set
    End Property

    Private _codMercaderiaDetalle As Integer = 0

    Public Property codMercaderiaDetalle() As Integer
        Get
            Return _codMercaderiaDetalle
        End Get
        Set(ByVal value As Integer)
            _codMercaderiaDetalle = value
        End Set
    End Property

    Private _codCompra As Integer = 0
    Public Property codCompra() As Integer
        Get
            Return _codCompra
        End Get
        Set(ByVal value As Integer)
            _codCompra = value
            txtIdRegistro.Text = value.ToString().PadLeft(7, "0")
        End Set
    End Property

    Private _codVenta As Integer = 0
    Public Property codVenta() As Integer
        Get
            Return _codVenta
        End Get
        Set(ByVal value As Integer)
            _codVenta = value
            txtIdRegistro.Text = value.ToString().PadLeft(7, "0")
        End Set
    End Property

    Private _codCajaExterno As Integer = 0
    Public Property codCajaExterno() As Integer
        Get
            Return _codCajaExterno
        End Get
        Set(ByVal value As Integer)
            _codCajaExterno = value
        End Set
    End Property

    Private _soloLectura As Boolean = False
    Public Property soloLectura() As Boolean
        Get
            Return _soloLectura
        End Get
        Set(ByVal value As Boolean)
            _soloLectura = value
        End Set
    End Property

    Private m_frmBusProveedor As frmProveedorBuscador
    Public Property frmBusProveedor() As frmProveedorBuscador
        Get
            Return m_frmBusProveedor
        End Get
        Set(ByVal value As frmProveedorBuscador)
            m_frmBusProveedor = value
        End Set
    End Property

    Private Sub btnBuscProveedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscProveedor.Click

        frmBusProveedor = New frmProveedorBuscador
        frmBusProveedor.ShowDialog()
        txtProveedor.Text = frmBusProveedor.ProveedorDesc
        codProveedor = frmBusProveedor.codProveedor

    End Sub

    Private Sub txtcantidad_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtcantidad.TextChanged
        If IsNumeric(txtcantidad.Text) And IsNumeric(txtprecio.Text) Then
            txttotal.Text = txtcantidad.Text * txtprecio.Text
        End If
    End Sub

    Private Sub frmCompras_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'If codTipoParam.Contains("EGRESOS") Then
        '    cboTipo.SelectedIndex = 0
        '    'cboTipo.Enabled = False
        'ElseIf codTipoParam.Contains("INGRESOS") Then
        '    cboTipo.SelectedIndex = 1
        '    'cboTipo.Enabled = False
        'End If

        If codCajaExterno = 0 Then

            oiml.idMovimientoCajaActual = controllerSYS.get_Caja_Actual(oiml.dbConn, oiml.idUsuario)
            If oiml.idMovimientoCajaActual = 0 And Not controller.MessageError Is Nothing Then
                MessageBox.Show("Error: " & controller.MessageError.Message, "Login", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End If

            cboTipo.SelectedIndex = 0
            ControlTipo()

        Else
            btnNuevo.Enabled = False
            btnCaja.Enabled = False
            cboTipo.Enabled = False
            btnSelCompra.Enabled = False
            btnSelVenta.Enabled = False
            btnBuscProveedor.Enabled = False
            btnCliente.Enabled = False
        End If
        

        dgvdetalle.AutoGenerateColumns = False

        btnImprimir.Visible = False

        cboEstado.SelectedIndex = 0

        oiml.CargarCombos(cboIVA, "Impuesto", "idImpuesto", controllerStock.get_impuestos(oiml.dbConn, 0, ""))

        If oiml.idMovimientoCajaActual = 0 And codCajaExterno = 0 Then

            frmCajaApert = New frmCajaApertura
            If frmCajaApert.ShowDialog() = Windows.Forms.DialogResult.Abort Then

                btnAgregarDetalle.Enabled = True
                btnEliminarDetalle.Enabled = True

                If (oiml.idMovimientoCajaActual > 0) Then
                    CargarDetalle()
                    Me.WindowState = FormWindowState.Maximized
                Else
                    btnAgregarDetalle.Enabled = False
                    btnEliminarDetalle.Enabled = False
                    txtDescripcion.Enabled = False
                    txtcantidad.Enabled = False
                    txtprecio.Enabled = False
                    Me.WindowState = FormWindowState.Maximized
                End If

            Else
                btnAgregarDetalle.Enabled = False
                btnEliminarDetalle.Enabled = False
                txtDescripcion.Enabled = False
                txtcantidad.Enabled = False
                txtprecio.Enabled = False
            End If

            Me.WindowState = FormWindowState.Maximized

        ElseIf oiml.idMovimientoCajaActual > 0 Or codCajaExterno > 0 Then

            CargarDetalle()
            Me.WindowState = FormWindowState.Maximized

        End If

    End Sub

    Private Sub CargarVentasDetalleOld()
        Try

            codMercaderiaDetalle = 0
            txtDescripcion.Text = ""
            txtcantidad.Text = 1
            txtprecio.Text = 0
            txttotal.Text = 0

            Dim ds As New DataTable
            ds = controllerVta.get_Ventas_Detalles_All(oiml.dbConn, codCompra)

            If Not ds Is Nothing Then
                dgvdetalle.DataSource = ds


            Else
                dgvdetalle.DataSource = Nothing
            End If

            txtDescripcion.Focus()

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub CargarComprasDetalleOld()
        Try

            codMercaderiaDetalle = 0
            txtDescripcion.Text = ""
            txtcantidad.Text = 1
            txtprecio.Text = 0
            txttotal.Text = 0

            Dim ds As New DataTable
            ds = controller.get_Compras_Detalles_All(oiml.dbConn, codCompra)

            If Not ds Is Nothing Then
                dgvdetalle.DataSource = ds
                'cboTipo.Enabled = False

            Else
                dgvdetalle.DataSource = Nothing
                'cboTipo.Enabled = True

            End If

            txtDescripcion.Focus()

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub CargarDetalle()
        Try
            codMercaderiaDetalle = 0
            txtDescripcion.Text = ""
            txtcantidad.Text = 1
            txtprecio.Text = 0
            txttotal.Text = 0
            'txtIdRegistro.Text = idMovimientoCaja.ToString().PadLeft(7, "0")
            NuevaOperacionDetalle()

            Dim ds As New DataTable
            Dim codParamCaja As Integer = 0

            If codCajaExterno > 0 Then
                codParamCaja = codCajaExterno
            Else
                codParamCaja = oiml.idMovimientoCajaActual
            End If

            ds = controller.get_Caja_Detalles_All(oiml.dbConn, codParamCaja, fechaFactura.Value, oiml.idUsuario)

            If Not ds Is Nothing Then
                dgvdetalle.DataSource = ds
                'cboTipo.Enabled = False
                If ds.Rows.Count > 0 Then

                    'txtIdRegistro.Text = ds.Rows(0)("id").ToString().PadLeft(7, "0")

                    'If ds.Rows(0)("tipo").ToString().Contains("EGRESOS") Then
                    '    cboTipo.Text = ds.Rows(0)("tipo")
                    '    ControlTipo()
                    '    txtProveedor.Text = ds.Rows(0)("persona")
                    '    codProveedor = ds.Rows(0)("idpersona")
                    '    fechaFactura.Value = ds.Rows(0)("fecha")
                    '    nroFactura.Text = ds.Rows(0)("nroComprobante")
                    '    cboEstado.Text = ds.Rows(0)("estado")
                    '    txtActualizadoPor.Text = ds.Rows(0)("actualizadoPor")
                    '    txtActualizadoFecha.Text = ds.Rows(0)("actualizadoFecha_")
                    'End If

                End If

            Else
                dgvdetalle.DataSource = Nothing
                'cboTipo.Enabled = True

            End If

            txtDescripcion.Focus()

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Dim ci As CultureInfo

    Private Sub CargarVentasOld()
        Try
            If codCompra > 0 Then

                Dim ds As New DataTable
                ds = controllerVta.get_Ventas_ByID(oiml.dbConn, codCompra)

                If Not ds Is Nothing Then

                    txtIdRegistro.Text = ds.Rows(0)("idVenta").ToString.PadLeft(7, "0")
                    txtActualizadoFecha.Text = ds.Rows(0)("actualizadoFecha_")
                    txtActualizadoPor.Text = ds.Rows(0)("actualizadoPor")

                    'ci = Thread.CurrentThread.CurrentCulture

                    txtProveedor.Text = ds.Rows(0)("cliente")
                    codProveedor = ds.Rows(0)("idCliente")
                    txtSaldo.Text = Decimal.Parse(ds.Rows(0)("totalFacturaSaldo").ToString).ToString("N0")
                    'ds.Rows(0)("totalFacturaSaldo").ToString("D")
                    txtTotalFactura.Text = Decimal.Parse(ds.Rows(0)("totalFactura").ToString).ToString("N0")
                    'ds.Rows(0)("totalFactura").ToString("D")
                    txtIVA.Text = Decimal.Parse(ds.Rows(0)("totalFacturaIVA").ToString).ToString("N0")
                    'ds.Rows(0)("totalFacturaIVA").ToString("D")
                    nroFactura.Text = ds.Rows(0)("nroComprobante")
                    fechaFactura.Value = ds.Rows(0)("fecha")

                    'If Not ds.Rows(0)("fechaVencimiento") Is DBNull.Value Then
                    '    fechaVto.Value = ds.Rows(0)("fechaVencimiento")
                    'End If

                    cboEstado.Text = ds.Rows(0)("estado")

                    cboTipo.SelectedIndex = 1

                    ControlEstados()

                    'btnGrabar.Enabled = True
                    'btnEliminar.Enabled = True

                    If ds.Rows(0)("estado") = "APROBADA" Then 'Or ds.Rows(0)("estado") = "ANULADA"
                        btnRegistrarCobro.Visible = True
                    Else
                        btnRegistrarCobro.Visible = False
                    End If

                    'CargarVentasDetalle()

                End If

            Else
                cboEstado.Text = "EN PROCESO"
                nroFactura.Focus()

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub CargarComprasOld()
        Try
            If codCompra > 0 Then

                Dim ds As New DataTable
                ds = controller.get_Compras_ByID(oiml.dbConn, codCompra)

                If Not ds Is Nothing Then

                    txtIdRegistro.Text = ds.Rows(0)("idCompra").ToString.PadLeft(7, "0")
                    txtActualizadoFecha.Text = ds.Rows(0)("actualizadoFecha_")
                    txtActualizadoPor.Text = ds.Rows(0)("actualizadoPor")

                    'ci = Thread.CurrentThread.CurrentCulture

                    txtProveedor.Text = ds.Rows(0)("proveedor")
                    codProveedor = ds.Rows(0)("idProveedor")
                    txtSaldo.Text = Decimal.Parse(ds.Rows(0)("totalFacturaSaldo").ToString).ToString("N0")
                    'ds.Rows(0)("totalFacturaSaldo").ToString("D")
                    txtTotalFactura.Text = Decimal.Parse(ds.Rows(0)("totalFactura").ToString).ToString("N0")
                    'ds.Rows(0)("totalFactura").ToString("D")
                    txtIVA.Text = Decimal.Parse(ds.Rows(0)("totalFacturaIVA").ToString).ToString("N0")
                    'ds.Rows(0)("totalFacturaIVA").ToString("D")
                    nroFactura.Text = ds.Rows(0)("nroComprobante")
                    fechaFactura.Value = ds.Rows(0)("fecha")

                    'If Not ds.Rows(0)("fechaVencimiento") Is DBNull.Value Then
                    '    fechaVto.Value = ds.Rows(0)("fechaVencimiento")
                    'End If

                    cboEstado.Text = ds.Rows(0)("estado")

                    cboTipo.SelectedIndex = 0

                    ControlEstados()

                    'btnGrabar.Enabled = True
                    'btnEliminar.Enabled = True

                    If ds.Rows(0)("estado") = "APROBADA" Then
                        btnRegistrarCobro.Visible = True
                    Else
                        btnRegistrarCobro.Visible = False
                    End If

                    'CargarComprasDetalle()

                End If

            Else
                cboEstado.Text = "EN PROCESO"
                nroFactura.Focus()

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

    Private Sub ControlEstados()

        If cboEstado.Text = "APROBADA" Then

            nroFactura.Enabled = False
            fechaFactura.Enabled = False
            'fechaVto.Enabled = False
            cboTipo.Enabled = False

            'btnBuscMercaderia.Enabled = False
            btnBuscProveedor.Enabled = False
            btnCliente.Enabled = False
            'btnBuscOrdenCompra.Enabled = False

            'btnGrabar.Enabled = False
            btnAgregarDetalle.Enabled = False

            'btnConfirmar.Visible = False

            'btnEliminar.Enabled = False
            btnEliminarDetalle.Enabled = False
            txtDescripcion.Enabled = False
            txtcantidad.Enabled = False
            txtprecio.Enabled = False
            cboIVA.Enabled = False

            btnCancelar.Focus()

        ElseIf cboEstado.Text = "ANULADA" Or soloLectura Then

            nroFactura.Enabled = False
            fechaFactura.Enabled = False
            'fechaVto.Enabled = False
            cboTipo.Enabled = False

            'btnBuscMercaderia.Enabled = False
            btnBuscProveedor.Enabled = False
            btnCliente.Enabled = False
            'btnBuscOrdenCompra.Enabled = False

            'btnGrabar.Enabled = False
            btnAgregarDetalle.Enabled = False
            btnEliminarDetalle.Enabled = False
            'btnConfirmar.Enabled = False
            'btnEliminar.Enabled = False
            'btnAnular.Enabled = False
            txtDescripcion.Enabled = False
            txtcantidad.Enabled = False
            txtprecio.Enabled = False
            cboIVA.Enabled = False

            btnCancelar.Focus()

        End If

    End Sub

    Private Function ValidarCampos(ByVal conProveedor As Boolean) As Boolean

        Dim controlCampos As Boolean = False

        'If nroFactura.Text = "" Or nroFactura.Text.Replace("-", "").Replace("_", "").Trim() = "" Then
        '    ErrorProvider1.SetError(nroFactura, "Campo obligatorio")
        '    controlCampos = True
        'Else
        '    ErrorProvider1.SetError(nroFactura, "")
        'End If        '

        If cboTipo.Text.Contains("EGRESOS") Then
            If txtProveedor.Text = "" And conProveedor Then
                ErrorProvider1.SetError(txtProveedor, "Campo obligatorio")
                controlCampos = True
            Else
                ErrorProvider1.SetError(txtProveedor, "")
            End If        '
        Else
            If txtCliente.Text = "" And conProveedor Then
                ErrorProvider1.SetError(txtCliente, "Campo obligatorio")
                controlCampos = True
            Else
                ErrorProvider1.SetError(txtCliente, "")
            End If        '
        End If
        

        'If cboTipo.Text = "CREDITO" Then
        '    If (fechaFactura.Value > fechaVto.Value) Then
        '        ErrorProvider1.SetError(fechaVto, "La fecha de Vencimiento debe ser mayor a la fecha de registro")
        '        controlCampos = True
        '    Else
        '        ErrorProvider1.SetError(fechaVto, "")
        '    End If        '
        'Else
        '    ErrorProvider1.SetError(fechaVto, "")
        'End If

        Return controlCampos

    End Function

    Private Function ValidarCamposDetalle() As Boolean

        Dim controlCampos As Boolean = False

        If txtDescripcion.Text = "" Then
            ErrorProvider1.SetError(txtDescripcion, "Campo obligatorio")
            controlCampos = True
        Else
            ErrorProvider1.SetError(txtDescripcion, "")
        End If        '

        If txtcantidad.Text = "" Or Not IsNumeric(txtcantidad.Text) Then
            ErrorProvider1.SetError(txtcantidad, "Campo obligatorio")
            controlCampos = True
        Else
            ErrorProvider1.SetError(txtcantidad, "")
        End If        '

        If txtprecio.Text = "" Or Not IsNumeric(txtprecio.Text) Then
            ErrorProvider1.SetError(txtprecio, "Campo obligatorio")
            controlCampos = True
        Else
            ErrorProvider1.SetError(txtprecio, "")
        End If        '

        Return controlCampos

    End Function

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If codCompra > 0 Then

            If MessageBox.Show("Desea eliminar el registro seleccionado?", "Compras", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                If cboTipo.Text.Contains("EGRESOS") Then
                    If controller.Delete_Compras(oiml.dbConn, codCompra, oiml.idUsuario) Then
                        Me.Close()

                    Else
                        MessageBox.Show("Error: " & controller.MessageError.Message, "Egresos", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    End If
                Else
                    If controllerVta.Delete_Ventas(oiml.dbConn, codCompra, oiml.idUsuario) Then
                        Me.Close()

                    Else
                        MessageBox.Show("Error: " & controllerVta.MessageError.Message, "Ingresos", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    End If
                End If


            End If

        End If

    End Sub

    Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        If ValidarCampos(True) Then
            Exit Sub
        End If

        Dim fechaVencimiento As String = ""

        'If cbxVto.Checked Then
        '    fechaVencimiento = fechaVto.Value
        'End If

        If codCompra = 0 And cboTipo.Text.Contains("EGRESOS") Then

            codCompra = controller.Insert_Compras(oiml.dbConn, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0)

            If codCompra > 0 Then
                'CargarCompras()
                MessageBox.Show("Registro grabado con exito!", "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

            Else
                MessageBox.Show("Error: " & controller.MessageError.Message, "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

        ElseIf codCompra = 0 And cboTipo.Text.Contains("INGRESOS") Then

            codCompra = controllerVta.Insert_Ventas(oiml.dbConn, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0, oiml.idMovimientoCajaActual)

            If codCompra > 0 Then
                'CargarVentas()
                MessageBox.Show("Registro grabado con exito!", "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

            Else
                MessageBox.Show("Error: " & controllerVta.MessageError.Message, "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

        ElseIf codCompra > 0 And cboTipo.Text.Contains("EGRESOS") Then

            If controller.Update_Compras(oiml.dbConn, codCompra, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0) Then
                'CargarCompras()
                MessageBox.Show("Registro grabado con exito!", "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)


            Else
                MessageBox.Show("Error: " & controller.MessageError.Message, "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

        ElseIf codCompra > 0 And cboTipo.Text.Contains("INGRESOS") Then

            If controllerVta.Update_Ventas(oiml.dbConn, codCompra, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0) Then
                'CargarVentas()
                MessageBox.Show("Registro grabado con exito!", "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)


            Else
                MessageBox.Show("Error: " & controllerVta.MessageError.Message, "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

        End If

    End Sub

    Private Sub dgvdetalle_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        If e.KeyCode = Keys.Enter Then
            If dgvdetalle.SelectedRows.Count > 0 Then

                codMercaderiaDetalle = dgvdetalle.SelectedRows(0).Cells(0).Value

            End If
        End If
    End Sub

    Private Sub dgvdetalle_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If dgvdetalle.SelectedRows.Count > 0 Then

            codMercaderiaDetalle = dgvdetalle.SelectedRows(0).Cells(0).Value

        End If
    End Sub

    Private Sub dgvdetalle_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvdetalle.CellClick
        Try

            If dgvdetalle.SelectedRows.Count > 0 Then

                codMercaderiaDetalle = dgvdetalle.SelectedRows(0).Cells(0).Value

            End If

        Catch ex As Exception
            MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub btnEliminarDetalle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminarDetalle.Click

        If codMercaderiaDetalle > 0 Then

            If MessageBox.Show("Desea eliminar el registro seleccionado?", "Compras", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                If cboTipo.Text.Contains("EGRESOS") Then

                    If controller.Delete_Compras_Detalle(oiml.dbConn, codMercaderiaDetalle, oiml.idUsuario, codCompra) Then
                        CargarDetalle()

                    Else
                        MessageBox.Show("Error: " & controller.MessageError.Message, "Compras", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    End If

                Else

                    If controllerVta.Delete_Ventas_Detalle(oiml.dbConn, codMercaderiaDetalle, oiml.idUsuario, codCompra) Then
                        CargarDetalle()

                    Else
                        MessageBox.Show("Error: " & controller.MessageError.Message, "Compras", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    End If

                End If

            End If

        End If

    End Sub

    Private Sub btnAgregarDetalle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregarDetalle.Click

        If ValidarCampos(True) Then
            Exit Sub
        End If

        If ValidarCamposDetalle() Then
            Exit Sub
        End If

        Dim fechaVencimiento As String = ""

        If cboTipo.Text.Contains("EGRESOS") And codCompra = 0 Then
            codCompra = controller.Insert_Compras(oiml.dbConn, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0, oiml.idMovimientoCajaActual)

            If codCompra = 0 And Not controller.MessageError Is Nothing Then
                MessageBox.Show("Error: " & controller.MessageError.Message, "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        ElseIf cboTipo.Text.Contains("INGRESOS") And codVenta = 0 Then
            codVenta = controllerVta.Insert_Ventas(oiml.dbConn, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0, oiml.idMovimientoCajaActual)

            If codVenta = 0 And Not controller.MessageError Is Nothing Then
                MessageBox.Show("Error: " & controller.MessageError.Message, "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        ElseIf codCompra > 0 And cboTipo.Text.Contains("EGRESOS") Then

            If controller.Update_Compras(oiml.dbConn, codCompra, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0) Then
            Else
                MessageBox.Show("Error: " & controller.MessageError.Message, "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

        ElseIf codVenta > 0 And cboTipo.Text.Contains("INGRESOS") Then

            If controllerVta.Update_Ventas(oiml.dbConn, codCompra, nroFactura.Text, fechaFactura.Value, _
                                                  codProveedor, fechaVencimiento, "CONTADO", _
                                                  cboEstado.Text, 0, 0, txtTotalFactura.Text, _
                                                  txtSaldo.Text, txtIVA.Text, oiml.idUsuario, 0) Then
            Else
                MessageBox.Show("Error: " & controllerVta.MessageError.Message, "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

        End If

        If codCompra > 0 And cboTipo.Text.Contains("EGRESOS") Then

            Dim idDeposito As Integer = 0
            Dim vtoMercaderia As String = ""
            If controller.Insert_Compras_Detalle(oiml.dbConn, codCompra, 0, _
                                                    txtcantidad.Text, txtprecio.Text, _
                                                    cboIVA.SelectedValue, txttotal.Text, _
                                                    oiml.idUsuario, False, "", _
                                                    vtoMercaderia, idDeposito, 0, txtDescripcion.Text, _
                                                    oiml.idMovimientoCajaActual, True) Then
                CargarDetalle()
                MessageBox.Show("Registro grabado con exito!", "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Else
                MessageBox.Show("Error: " & controller.MessageError.Message, "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        ElseIf codVenta > 0 And cboTipo.Text.Contains("INGRESOS") Then

            Dim idDeposito As Integer = 0
            Dim vtoMercaderia As String = ""
            If controllerVta.Insert_Ventas_Detalle(oiml.dbConn, codVenta, 0, _
                                                    txtcantidad.Text, txtprecio.Text, _
                                                    cboIVA.SelectedValue, txttotal.Text, _
                                                    oiml.idUsuario, 0, txtDescripcion.Text, _
                                                    oiml.idMovimientoCajaActual, True) Then
                CargarDetalle()
                MessageBox.Show("Registro grabado con exito!", "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Else
                MessageBox.Show("Error: " & controllerVta.MessageError.Message, "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        End If

    End Sub

    Private Sub btnConfirmar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        If codCompra > 0 And cboTipo.Text.Contains("INGRESOS") Then

            If controllerVta.Update_Ventas_Estado(oiml.dbConn, codCompra, "APROBADA", oiml.idUsuario, nroFactura.Text, 0) Then
                'CargarVentas()
                MessageBox.Show("Registro confirmado con exito!", "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Else
                MessageBox.Show("Error: " & controllerVta.MessageError.Message, "INGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        ElseIf codCompra > 0 And cboTipo.Text.Contains("EGRESOS") Then

            If controller.Update_Compras_Estado(oiml.dbConn, codCompra, "APROBADA", oiml.idUsuario) Then
                'CargarCompras()
                MessageBox.Show("Registro confirmado con exito!", "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Else
                MessageBox.Show("Error: " & controller.MessageError.Message, "EGRESOS", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

        End If

    End Sub

    Private Sub cboTipo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboTipo.SelectedIndexChanged

        ControlTipo()

    End Sub

    Private Sub ControlTipo()
        If cboTipo.Text.Contains("EGRESOS") Then
            btnBuscProveedor.Enabled = True
            btnCliente.Enabled = False
            codProveedor = 0
            txtCliente.Text = ""
            txtProveedor.Text = ""
            btnSelVenta.Visible = False
            btnSelCompra.Visible = True
        Else
            btnBuscProveedor.Enabled = False
            btnCliente.Enabled = True
            codProveedor = 0
            txtCliente.Text = ""
            txtProveedor.Text = ""
            btnSelVenta.Visible = True
            btnSelCompra.Visible = False
        End If
    End Sub

    'codigo para textonumerico-------------------------------------------------

    Private Sub txtprecio_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtprecio.TextChanged
        If IsNumeric(txtcantidad.Text) And IsNumeric(txtprecio.Text) Then

            If txtprecio.Text = "" Then
                txtprecio.Text = Nothing
                textWithcomma = "0"
                'this property maintain the content of textbox with comma
                'this property maintain the content of textbox without comma
                textWithoutcomma = "0"
            Else
                If txtprecio.Text <> "" Then
                    Dim d As Double = Convert.ToDouble(skipComma(txtprecio.Text))
                    txtprecio.Text = d.ToString("N0") 'd.ToString("#.#", System.Globalization.CultureInfo.InvariantCulture)
                    textWithcomma = txtprecio.Text
                    'property maintain content of textbox with comma
                    'property maintain content of textbox without comma
                    textWithoutcomma = skipComma(txtprecio.Text)
                End If
            End If

            txtprecio.[Select](txtprecio.Text.Length, 0)

        End If
    End Sub

    Public textWithcomma As String
    Public textWithoutcomma As String

    Public Function skipComma(ByVal str As String) As String
        Dim ss As String() = Nothing
        Dim strnew As String = ""
        If str = "" Then
            strnew = "0"
        Else
            ss = str.Split("."c)
            For i As Integer = 0 To ss.Length - 1
                strnew += ss(i)
            Next
        End If
        Return strnew
    End Function

    Private Sub txtprecio_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtprecio.KeyPress
        If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso (e.KeyChar <> "."c) Then
            e.Handled = True
        End If

        ' only allow one decimal point
        If (e.KeyChar = "."c) AndAlso (TryCast(sender, TextBox).Text.IndexOf("."c) > -1) Then
            e.Handled = True
        End If

    End Sub

    'codigo para textonumerico-------------------------------------------------

    Private Sub btnAnular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        If codCompra > 0 Then

            If MessageBox.Show("Desea anular el registro seleccionado?", "Compras", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then

                If cboTipo.Text.Contains("EGRESOS") Then

                    If controller.Update_Compras_Estado(oiml.dbConn, codCompra, "ANULADA", oiml.idUsuario) Then
                        Me.Close()
                    Else
                        MessageBox.Show("Error: " & controller.MessageError.Message, "Egresos", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End If

                Else

                    If controllerVta.Update_Ventas_Estado(oiml.dbConn, codCompra, "ANULADA", oiml.idUsuario, nroFactura.Text, 0) Then
                        Me.Close()
                    Else
                        MessageBox.Show("Error: " & controllerVta.MessageError.Message, "Ingresos", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End If

                End If

            End If

        Else

        End If

    End Sub

    Private Sub txtMercaderia_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs)
        txtDescripcion.Text = ""

    End Sub

    Private m_frmRegistroCobro As frmComprasCobro
    Public Property frmRegistroCobro() As frmComprasCobro
        Get
            Return m_frmRegistroCobro
        End Get
        Set(ByVal value As frmComprasCobro)
            m_frmRegistroCobro = value
        End Set
    End Property

    Private Sub btnRegistrarCobro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegistrarCobro.Click

        If codCompra > 0 And codProveedor > 0 And cboEstado.Text = "APROBADA" And cboTipo.Text.Contains("EGRESOS") Then

            frmRegistroCobro = New frmComprasCobro
            frmRegistroCobro.codCompra = codCompra
            frmRegistroCobro.codVenta = 0
            frmRegistroCobro.codProveedor = codProveedor
            frmRegistroCobro.ShowDialog()
            CargarDetalle()

        ElseIf codCompra > 0 And codProveedor > 0 And cboEstado.Text = "APROBADA" And cboTipo.Text.Contains("INGRESOS") Then

            frmRegistroCobro = New frmComprasCobro
            frmRegistroCobro.codCompra = 0
            frmRegistroCobro.codVenta = codCompra
            frmRegistroCobro.codProveedor = codProveedor
            frmRegistroCobro.ShowDialog()
            CargarDetalle()

        End If

    End Sub

    Private m_frmBusCliente As frmClienteBuscador
    Public Property frmBusCliente() As frmClienteBuscador
        Get
            Return m_frmBusCliente
        End Get
        Set(ByVal value As frmClienteBuscador)
            m_frmBusCliente = value
        End Set
    End Property


    Private Sub btnCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCliente.Click

        codProveedor = 0
        frmBusCliente = New frmClienteBuscador
        frmBusCliente.ShowDialog()
        txtCliente.Text = frmBusCliente.ClienteDesc
        codProveedor = frmBusCliente.codCliente

        If codProveedor > 0 Then

        End If

    End Sub

    Private m_frmCaja As frmCajaApertura
    Public Property frmCajaApert() As frmCajaApertura
        Get
            Return m_frmCaja
        End Get
        Set(ByVal value As frmCajaApertura)
            m_frmCaja = value
        End Set
    End Property

    Private Sub btnCaja_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCaja.Click

        frmCajaApert = New frmCajaApertura

        If frmCajaApert.ShowDialog() = Windows.Forms.DialogResult.Abort Then

            btnAgregarDetalle.Enabled = True
            btnEliminarDetalle.Enabled = True

            If frmCajaApert.DialogResult = Windows.Forms.DialogResult.Abort Then
                Me.Close()
            Else
                CargarDetalle()
            End If

        Else

            If oiml.idMovimientoCajaActual = 0 Then
                btnAgregarDetalle.Enabled = False
                btnEliminarDetalle.Enabled = False
                'txtDescripcion.Enabled = False
                'txtcantidad.Enabled = False
                'txtprecio.Enabled = False
            End If

        End If

    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click

        If oiml.idMovimientoCajaActual > 0 Then
            NuevaOperacion()
        Else

            frmCajaApert = New frmCajaApertura
            If frmCajaApert.ShowDialog() = Windows.Forms.DialogResult.Abort Then

                btnAgregarDetalle.Enabled = True
                btnEliminarDetalle.Enabled = True

                If frmCajaApert.DialogResult = Windows.Forms.DialogResult.Abort Then
                    Me.Close()
                Else
                    CargarDetalle()
                End If

            Else
                btnAgregarDetalle.Enabled = False
                btnEliminarDetalle.Enabled = False
                txtDescripcion.Enabled = False
                txtcantidad.Enabled = False
                txtprecio.Enabled = False
            End If

        End If

    End Sub

    Private Sub NuevaOperacion()
        btnAgregarDetalle.Enabled = True
        btnEliminarDetalle.Enabled = True
        txtDescripcion.Enabled = True
        txtcantidad.Enabled = True
        txtprecio.Enabled = True
        nroFactura.Enabled = True

        txtIdRegistro.Text = ""
        nroFactura.Text = ""
        codCompra = 0
        codVenta = 0
        txtCliente.Text = ""
        txtProveedor.Text = ""
        codProveedor = 0
        txtDescripcion.Text = ""
        txtTotalFactura.Text = 0
        txtIVA.Text = 0
        txtSaldo.Text = 0

    End Sub

    Private Sub NuevaOperacionDetalle()

        txtDescripcion.Text = ""
        txtTotalFactura.Text = 0
        txtIVA.Text = 0
        txtSaldo.Text = 0

    End Sub

    Private m_frmBusFactura As frmFacturaBuscador
    Public Property frmBusFactura() As frmFacturaBuscador
        Get
            Return m_frmBusFactura
        End Get
        Set(ByVal value As frmFacturaBuscador)
            m_frmBusFactura = value
        End Set
    End Property

    Private Sub btnSelFactura_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelVenta.Click

        If codProveedor = 0 Then
            MessageBox.Show("Debe seleccionar el cliente.", "Caja", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If

        If oiml.idMovimientoCajaActual > 0 Then

            frmBusFactura = New frmFacturaBuscador
            frmBusFactura.idCaja = oiml.idMovimientoCajaActual
            frmBusFactura.conSaldo = True
            frmBusFactura.codCliente = codProveedor
            frmBusFactura.feInicio = New DateTime(fechaFactura.Value.Year, fechaFactura.Value.Month, fechaFactura.Value.Day, 0, 0, 0)
            frmBusFactura.feFin = New DateTime(fechaFactura.Value.Year, fechaFactura.Value.Month, fechaFactura.Value.Day, 23, 59, 59)
            frmBusFactura.esContado = True
            frmBusFactura.esPago = False
            frmBusFactura.esCompra = False
            frmBusFactura.ShowDialog()
            CargarDetalle()

        End If


    End Sub

    Private Sub btnSelCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelCompra.Click

        If codProveedor = 0 Then
            MessageBox.Show("Debe seleccionar el proveedor.", "Caja", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If

        If oiml.idMovimientoCajaActual > 0 Then

            frmBusFactura = New frmFacturaBuscador
            frmBusFactura.idCaja = oiml.idMovimientoCajaActual
            frmBusFactura.conSaldo = True
            frmBusFactura.codCliente = codProveedor
            frmBusFactura.feInicio = New DateTime(fechaFactura.Value.Year, fechaFactura.Value.Month, fechaFactura.Value.Day, 0, 0, 0)
            frmBusFactura.feFin = New DateTime(fechaFactura.Value.Year, fechaFactura.Value.Month, fechaFactura.Value.Day, 23, 59, 59)
            frmBusFactura.esContado = True
            frmBusFactura.esPago = True
            frmBusFactura.esCompra = True
            frmBusFactura.ShowDialog()
            CargarDetalle()

        End If

    End Sub

   

    Private Sub txtprecio_Leave_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtprecio.Leave
        txttotal.Text = oiml.isNumeric(txtcantidad.Text) * oiml.isNumeric(txtprecio.Text)
        txttotal.Text = oiml.isNumeric(txttotal.Text).ToString("N0")
    End Sub

End Class